<?php

abstract class AcaoBase extends ComponenteHtml {
    
    /** @var ModelFormulario */
    private $Formulario;
    private $chave;
    private $habilitada = true;
    private $confirma = false;

    public function __construct($rotina,$acao,$titulo='') {
        $this->setFormulario(new ModelFormulario());
        $this->getFormulario()->setRotina($rotina);
        $this->getFormulario()->setAcao($acao);
        $oPersistencia = new PersistenciaFormulario($this->getFormulario());
        $oPersistencia->buscaDados();
        if ($titulo) {
            $this->setTitulo($titulo);
        }
    }
    
    public function getFormulario() {
        return $this->Formulario;
    }

    public function setFormulario(ModelFormulario $Formulario) {
        $this->Formulario = $Formulario;
    }
    
    public function getTitulo() {
        return $this->getFormulario()->getTitulo();
    }

    public function setTitulo($titulo) {
        $this->getFormulario()->setTitulo($titulo);
    }

    public function getChave() {
        return $this->chave;
    }

    public function setChave($chave) {
        $this->chave = $chave;
    }
    
    public function getHabilitada() {
        return $this->habilitada;
    }

    public function setHabilitada($habilitada) {
        $this->habilitada = $habilitada;
    }
    
    public function getConfirma() {
        return $this->confirma;
    }

    public function setConfirma($confirma) {
        $this->confirma = $confirma;
    }
    
    protected function getFnLoadPage() {
        $sFn = "loadPage(".toJson($this->getFormulario()->getRotina()).",".toJson($this->getFormulario()->getAcao()).",".toJson($this->getChave()).")";
        if ($this->getConfirma()) {
            $sFn = 'if (confirm("Confirma: '.$this->getTitulo().'?")) {'.$sFn.'}';
        }
        return $sFn;
    }
    
    public function possuiPrivilegio() {
        return PersistenciaPrivilegio::possuiPrivilegio($this->getFormulario());
    }
    
    /**
     * @param AcaoBase[] $aGrupoAcao
     */
    static public function checkPrivilegioGrupoAcao(&$aGrupoAcao) {
        foreach ($aGrupoAcao as $ind => $oAcao) {
            if (!$oAcao->possuiPrivilegio()) {
                unset($aGrupoAcao[$ind]);
            }
        }
    }
    
}

?>
